# -*- coding: utf-8 -*-
from django.db import models
from django.db.models import signals
from django.contrib.auth.models import User
from apps.l10n.models import Country, AdminArea, City
from apps.amway.models.clientemanager import ClienteManager
from apps.amway.models.productomanager import ProductoManager
from apps.amway.models.ventaclientemanager import VentaClienteManager
from apps.amway.models.precioprouctomanager import PreciosProductoManager
from apps.amway.models.empresariosmanager import EmpresariosAmwayManager
from apps.amway.models.cajamanager import FlujoCajaManager
from apps.amway.models.inventariomanager import InventarioManager
################################################################################
# Create your models here.
class Producto(models.Model):
    codigo = models.IntegerField('Codigo', primary_key=True)
    descripcion = models.CharField(max_length=200)
    marca = models.CharField(max_length=200)
    slug_marca = models.SlugField(max_length=200)
    categoria = models.CharField(max_length=200, blank=True, null=True)
    objects = ProductoManager()
    class Meta:
        ordering = ('categoria',)
    def __unicode__(self):       
        return u'%s' % self.descripcion    
################################################################################
class PreciosProducto(models.Model):    
    precio_catalogo = models.DecimalField(max_digits=14, decimal_places=2)
    fecha_inicio = models.DateField()
    fecha_final = models.DateField()
    producto = models.ForeignKey(Producto)
    objects = PreciosProductoManager()
    class Meta:
        ordering = ('producto__marca',)
    def __unicode__(self):       
        return u'%s' % self.producto    
################################################################################
class Cliente(models.Model):
    codigo = models.DecimalField('Codigo', primary_key=True, max_digits=30, decimal_places=0)    
    nombre = models.CharField(max_length=100)
    apellido = models.CharField(max_length=100, blank=True)
    email = models.EmailField(blank=True)
    telefono = models.CharField(max_length=30, blank=True)
    movil = models.CharField(max_length=50, blank=True)
    fecha_nacimiento = models.DateField(blank=True, null=True)
    activo = models.IntegerField()
    usuario = models.ForeignKey(User)
    pais = models.ForeignKey(Country)
    departamento = models.ForeignKey(AdminArea)
    ciudad = models.ForeignKey(City)
    objects = ClienteManager()
    class Meta:
        get_latest_by = 'codigo'   
    def __unicode__(self):       
        return u'%s %s' % (self.nombre, self.apellido)
#################################################################################
class ProductosCliente(models.Model):
    fecha_entrega = models.DateField()
    cantidad = models.IntegerField()
    producto = models.ForeignKey(Producto)
    cliente = models.ForeignKey(Cliente)
    def __unicode__(self):
        return u'%s' % self.cliente
################################################################################
class PagosCliente(models.Model):    
    fecha_pago = models.DateField()
    valor_pagado = models.DecimalField(max_digits=14, decimal_places=2)       
    cliente = models.ForeignKey(Cliente)
    def __unicode__(self):       
        return u'%s' % self.cliente 
#################################################################################
class Inventario(models.Model):
    existencias = models.IntegerField()
    valor = models.DecimalField(max_digits=14, decimal_places=2)
    usuario = models.ForeignKey(User)
    producto = models.ForeignKey(Producto)
    objects = InventarioManager()
    def __unicode__(self):
        return u'%s' % self.producto 
#################################################################################
class TipoTransaccion(models.Model):
    tipo_transaccion = models.CharField(max_length=200)
    class Meta:
        verbose_name_plural = 'Tipo transacciones'
    def __unicode__(self):       
        return u'%s' % self.tipo_transaccion
#################################################################################
class HistorialInventario(models.Model):
    fecha = models.DateField()
    cantidad = models.IntegerField()
    inventario = models.ForeignKey(Inventario)
    transaccion = models.ForeignKey(TipoTransaccion)
    usuario = models.ForeignKey(User)
    def __unicode__(self):       
        return u'%s %s' % (self.fecha, self.inventario)
#################################################################################
class EmpresariosAmway(models.Model):
    codigo = models.DecimalField('Codigo', primary_key=True, max_digits=30, decimal_places=0)
    nombre = models.CharField(max_length=200, blank=True)
    apellido = models.CharField(max_length=200)
    email = models.EmailField(blank=True)
    telefono = models.CharField(max_length=30, blank=True)
    movil = models.CharField(max_length=50, blank=True)
    fecha_nacimiento = models.DateField(blank=True, null=True)
    pais = models.ForeignKey(Country)
    departamento = models.ForeignKey(AdminArea)
    ciudad = models.ForeignKey(City)
    usuario = models.ForeignKey(User)
    objects = EmpresariosAmwayManager()
    class Meta:
        get_latest_by = 'codigo'
        verbose_name_plural = 'Empresarios Amway'
    def __unicode__(self):       
        return u'%s %s' % (self.nombre, self.apellido)
#################################################################################
class PrestamosProductos(models.Model):
    fecha = models.DateField()
    cantidad = models.IntegerField()
    usuario = models.ForeignKey(User)
    empresario = models.ForeignKey(EmpresariosAmway)    
    tipo_prestamo = models.ForeignKey(TipoTransaccion)
    producto = models.ForeignKey(Producto)
    class Meta:
        verbose_name_plural = 'Prestamos productos'
    def __unicode__(self):       
        return u'%s %s' % (self.empresario, self.fecha)
#################################################################################
class DevolucionProductos(models.Model):
    motivo = models.CharField(max_length=500)
    fecha = models.DateField()
    cantidad = models.IntegerField()
    producto = models.ForeignKey(Producto)
    usuario = models.ForeignKey(User)
    tipo = models.ForeignKey(TipoTransaccion)
    cliente = models.ForeignKey(Cliente)
    class Meta:
        verbose_name_plural = 'Devolucion productos'
    def __unicode__(self):       
        return u'%s %s' % (self.motivo, self.fecha)
#################################################################################
class VentaCliente(models.Model):
    valor = models.DecimalField(max_digits=14, decimal_places=2)
    saldo = models.DecimalField(max_digits=14, decimal_places=2)
    cliente = models.OneToOneField(Cliente)
    usuario = models.ForeignKey(User)
    objects = VentaClienteManager()
    def __unicode__(self):       
        return u'%s %s %s' % (self.cliente, self.valor, self.saldo)
#################################################################################
class Factura(models.Model):
    codigo = models.DecimalField('Codigo', primary_key=True, max_digits=30, decimal_places=0) 
    fecha = models.DateField()
    usuario = models.ForeignKey(User)
    def __unicode__(self):
        return u'%s %s' % (self.codigo, self.usuario)
#################################################################################
class Nota(models.Model):
    asunto = models.CharField(max_length=100)   
    contenido = models.CharField(max_length=500)
    fecha = models.DateField()    
    cliente = models.ForeignKey(Cliente)
    def __unicode__(self):       
        return u'%s %s %s' % (self.asunto, self.contenido, self.cliente)
#################################################################################
class FlujoCaja(models.Model):	
	saldo = models.DecimalField(max_digits=14, decimal_places=2)
	haber = models.DecimalField(max_digits=14, decimal_places=2, blank=True)
	debe = models.DecimalField(max_digits=14, decimal_places=2, blank=True)
	descripcion = models.CharField(max_length=100)
	fecha = models.DateField()	
	usuario = models.ForeignKey(User)
	objects = FlujoCajaManager()
	class Meta:
		get_latest_by = 'id'
	def __unicode__(self):
		return u'%s %s' % (self.usuario, self.saldo)
#################################################################################
#class Pedido(models.Model):    
#    codigo = models.DecimalField('Codigo', primary_key=True, max_digits=30, decimal_places=0)    
#    fecha_compra = models.DateField(null=True, blank=True)
#    fecha_ingreso = models.DateField(null=True, blank=True)
#    valor = models.DecimalField(max_digits=12, decimal_places=2)    
#    cliente = models.ForeignKey(Cliente, null=True, blank=True)
#    usuario = models.ForeignKey(User, null=True, blank=True)
#    producto = models.ManyToManyField(Producto, through='ProductosPedido')
#    objects = PedidoManager()    
#    def __unicode__(self):
#        return u'%s' % self.codigo
################################################################################## 
#class ProductosPedido(models.Model):
#    cantidad = models.IntegerField()
#    precio_producto = models.DecimalField(max_digits=8, decimal_places=2)
#    valor = models.DecimalField(max_digits=12, decimal_places=2)
#    fecha_entrega = models.DateField()
#    producto = models.ForeignKey(Producto)
#    pedido = models.ForeignKey(Pedido)
#    def __unicode__(self):       
#        return u'%s %s' % (self.producto, self.pedido)
################################################################################
#class Inventario(models.Model):
#    codigo = models.DecimalField('Codigo', primary_key=True, max_digits=11, decimal_places=0)
#    fecha_ingreso = models.DateField()
#    valor = models.DecimalField(max_digits=12, decimal_places=2)
#    usuario = models.ForeignKey(User)
#    producto = models.ManyToManyField(Producto, through='ProductosInventario')    
#    def __unicode__(self):       
#        return u'%s' % self.codigo    
#################################################################################
#class ProductosInventario(models.Model):
#    producto = models.ForeignKey(Producto)
#    inventario = models.ForeignKey(Inventario)
#    cantidad = models.IntegerField()
#    #objects = ProductoInventarioManager()
#    def __unicode__(self):       
#        return u'%s' % self.inventario
#################################################################################